//
//  SwiftUIProjectApp.swift
//  SwiftUIProject
//
//  Created by ZhouShuai on 2024/8/16.
//

import SwiftUI

// 在SwiftUIProject前面加上 @main 属性，表示进入App的唯一入口点
// @main 底层实现了App的main(）方法
@main
struct SwiftUIProject: App {
    // @Environment：这是一个属性包装器，用于从环境值中获取数据
    @Environment(\.scenePhase) var scenePhase

    // 相当于以前的 didFinishLaunching 方法,进行初始化操作
    init() {
        print("Application is starting...")
    }

    var body: some Scene {
        WindowGroup {
            MainTabView()
        }.onChange(of: scenePhase) { _, newValue in
            switch newValue {
            case .active:
                print("active")
            case .background:
                print("background")
            case .inactive:
                print("inactive")
            default:
                print("default")
            }
        }
    }
}

/**
 App：SwiftUI应用程序的入口点，它是最顶层的视图，定义了整个应用程序的根视图;
 1.通常包含一个或多个Scene，每个Scene代表应用程序的一个独立运行环境;
 2.在App中定义的常量、变量其生命周期与整个app是完全一致的

 Scene：即场景, 代表应用程序中的一个独立运行环境，它可以是一个窗口、一个分屏视图或者是一个多任务视图。
 1.每个Scene都可以有自己的生命周期，包括创建、更新、销毁等。
 2.在iOS中，一个Scene通常对应于一个UIScene，它可以是主屏幕、通知中心、控制中心等。
 3.在iPadOS中，最多可以打开两个运行窗口(Scene)，可以分屏显示，也可以全屏独立显示；
 4.在macOS中，可以打开多个窗口，并通过程序菜单中的窗口菜单来进行多窗口管理。

 WindowGroup: 一个特殊的视图，通常用于iOS和macOS应用程序中，用于定义窗口的根视图；
 1.在iOS中，WindowGroup通常用于定义应用程序的主窗口，而在macOS中，它用于定义每个独立窗口的根视图；
 2.每个Scene可以包含一个或多个WindowGroup，但是只有最前面的可以被显示；
 3.每个WindowGroup可以加入多个View，呈现状态有点类似VStack；
 */
